package org.larkdoc.service;

import java.util.List;

import org.larkdoc.model.bo.DocBO;
import org.larkdoc.model.entity.DocInfo;
import org.larkdoc.model.vo.DocVO;
import org.larkdoc.model.vo.PageVO;

import com.github.pagehelper.PageInfo;

/**
 * 文档信息接口
 * 
 * @author  zhangpeijun[zhangpeijun1024@qq.com]
 * @version  [v1.0.1, 2017年10月17日]
 * @see  [相关类/方法]
 * @since  [产品/模块版本]
 */
public interface DocService {
    
    /**
     * 根据ID删除记录
     * @param id
     * @return
     * 
     * @returns int
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午3:21:36
     */
    int deleteByPrimaryKey(Integer id);
    
    /**
     * 新增记录
     * @param record
     * @return
     * 
     * @returns int
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午3:21:52
     */
    int insert(DocInfo record);
    
    /**
     * 新增记录：只记录对象非空属性
     * @param record
     * @return
     * 
     * @returns int
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午3:22:08
     */
    int insertSelective(DocInfo record);
    
    /**
     * 根据ID查询记录
     * @param id
     * @return
     * 
     * @returns DocInfo
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午3:22:40
     */
    DocInfo selectByPrimaryKey(Integer id);
    
    /**
     * 根据ID更新参数中非空的属性
     * @param record
     * @return
     * 
     * @returns int
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午3:22:57
     */
    int updateByPrimaryKeySelective(DocInfo record);
    
    /**
     * 根据ID更新记录
     * @param record
     * @return
     * 
     * @returns int
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午3:24:02
     */
    int updateByPrimaryKey(DocInfo record);
    
    /**
     * 根据ID获取用户可见文档：<br/>
     * 1、全量开放文档<br/>
     * 2、所属群主文档<br/>
     * 3、所属项目文档<br/>
     * @param id
     * @param account
     * @return [参数说明]
     * 
     * @return DocInfo [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年4月12日下午4:36:18
     */
    DocInfo getByIdAndAccount(Integer id, String account);
    
    /**
     * 根据文档信息查询记录
     * @param docInfo
     * @return
     * 
     * @returns List<DocInfo>
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午3:24:13
     */
    List<DocInfo> selectByDocInfo(DocInfo docInfo);
    
    /**
     * 分页查询
     * @param page
     * @return
     * 
     * @returns PageInfo<DocInfo>
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午3:24:27
     */
    PageInfo<DocInfo> page(PageVO<DocVO> page);
    
    /**
     * 分页查询，返回业务类(DocBO)结果集
     * @param page
     * @return
     * 
     * @returns PageInfo<DocBO>
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午3:24:39
     */
    PageInfo<DocBO> pageBO(PageVO<DocVO> page);
    
    /**
     * 新增自定义业务类文档信息
     * @param docBO
     * @return
     * 
     * @returns int
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午3:25:26
     */
    int insertDocBo(DocBO docBO);
    
    /**
     * 检测文档是否存在，参数为空的情况下视为已存在。
     * true： 存在
     * false：不存在
     * @param docInfo
     * @param account
     * @return
     * 
     * @returns boolean
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年12月19日上午10:19:40
     */
    boolean checkExists(DocInfo docInfo,String account);
    
    /**
     * 根据文档VO查询信息
     * @param docVO
     * @return
     * 
     * @returns List<DocInfo>
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午3:26:26
     */
    List<DocInfo> selectByDocVO(DocVO docVO);
    
    /**
     * 根据ID获取有查看权限的文档
     * @param id
     * @param account
     * @return
     * 
     * @returns DocBO
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午4:12:35
     */
    DocBO getAuthDocById(Integer id, String account);
    
    /**
     * 根据id集和帐号删除记录
     * @param ids
     * @param account
     * @return
     * 
     * @returns int
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午3:26:46
     */
    int deleteByIdsAndAccount(int[] ids, String account);


    /**
     * 根据项目查询相关文档
     * @param page
     * @return
     * 
     * @returns PageInfo<DocBO>
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年12月19日上午10:20:12
     */
    PageInfo<DocBO> pageByProject(PageVO<DocVO> page);
}